home *** CD-ROM | disk | FTP | other *** search
- 100 REM * MACRO EDITOR *
- 110 REM * FOR USE WITH *
- 120 REM * SID SEQUENCER *
- 130 REM * BY V.H.BERRY *
- 140 REM * C.1989 *
- 200 GOSUB 50010:REM INITIALISATION
- 210 GOSUB 35010:REM MAIN MENU
- 220 PRINT"[147]MACRO EDITOR."
- 230 PRINT"V.H.BERRY."
- 240 PRINT"C.1989."
- 250 END
- 5000 REM TEMPO CHANGE
- 5010 VL=PEEK(49275):VL=VL+I:IF VL=256 THEN VL=1
- 5020 IF VL=0 THEN VL=255
- 5030 POKE 49275,VL:POKE 49276,0
- 5040 RETURN
- 6000 REM SEQUENCER ON/OFF
- 6010 IF MF=0 THEN MF=1:SYS 49235:RETURN
- 6020 MF=0:SYS 49209:RETURN
- 15000 REM BLOCK EDITOR
- 15010 GOSUB 27010:REM EDIT SCREEN
- 15100 GET K$:IF K$="" THEN 15100
- 15102 IF K$="" THEN GOSUB 16030:SY=SY+1:GOSUB 16010:REM EDIT CURSOR DOWN
- 15104 IF K$="[145]" THEN GOSUB 16030:SY=SY-1:GOSUB 16010:REM EDIT CURSOR UP
- 15106 IF K$="" THEN GOSUB 16030:SX=SX+1:GOSUB 16010:REM EDIT CURSOR RIGHT
- 15108 IF K$="[157]" THEN GOSUB 16030:SX=SX-1:GOSUB 16010:REM EDIT CURSOR LEFT
- 15110 IF K$="[147]" THEN GOSUB 16510:GOSUB 27010:REM CLEAR CHANNEL
- 15120 IF K$="" THEN GOSUB 17010:GOSUB 27010:REM DELETE BLOCK
- 15130 IF K$="" THEN GOSUB 18010:REM WRITE BLOCK
- 15135 IF K$="" THEN GOSUB 16610:REM SET BEGIN MARKER
- 15136 IF K$="" THEN GOSUB 16610:REM SET END MARKER
- 15140 IF K$=" " THEN GOSUB 17510:REM INSERT BLOCK
- 15145 IF K$="" THEN POKE FSID,0:POKE FSID+7,0:POKE FSID+14,0:REM RESET NOTE COUNTERS
- 15150 IF K$="F" THEN GOSUB 30010:GOSUB 27010:REM CHANGE FILENAME
- 15160 IF K$="P" THEN PG=PG+1:GOSUB 27010:REM NEXT PAGE
- 15165 IF K$="[208]" THEN PG=PG-1:GOSUB 27010:REM PREVIOUS PAGE
- 15167 IF K$="+" THEN I=-1:GOSUB 5010:REM INCREASE TEMPO
- 15168 IF K$="-" THEN I=1:GOSUB 5010:REM DECREASE TEMPO
- 15170 IF K$=CHR$(133) THEN OS=OS+1:GOSUB 27010:REM F1 NEXT CHANNEL
- 15180 IF K$=CHR$(134) THEN GOSUB 28010:REM F3 HELP SCREEN
- 15190 IF K$=CHR$(135) THEN GOSUB 6010:REM F5 SEQUENCER ON/OFF
- 15200 IF K$=CHR$(136) THEN RETURN:REM F7 EXIT
- 15210 GOTO 15100
- 16000 REM CURSOR CONTROL
- 16010 IF SX>7 THEN SX=0
- 16015 IF SX<0 THEN SX=7
- 16020 IF SY>7 THEN SY=0
- 16025 IF SY<0 THEN SY=7
- 16030 Y$="":PRINT"";
- 16040 FOR I=0 TO SY
- 16050 PRINT"";
- 16060 NEXT
- 16070 FOR I=0 TO SX
- 16080 PRINT"";
- 16090 NEXT
- 16100 OPEN 1,3
- 16110 FOR I=1 TO 3
- 16120 GET#1,X$
- 16130 Y$=Y$+X$
- 16140 NEXT
- 16150 CLOSE 1
- 16155 IF FG=0 THEN PRINT"";:FG=1:GOTO 16160
- 16156 FG=0
- 16160 PRINT"[157][157][157]";Y$;"[146]"
- 16170 RETURN
- 16500 REM CLEAR CHANNEL
- 16510 PRINT" CLEAR CHANNEL DATA : PRESS [RETURN] [146]"
- 16520 GET K$:IF K$="" THEN 16520
- 16530 IF K$<>CHR$(13) THEN K$="":RETURN
- 16540 N(OS)=0
- 16550 POKE CH+(OS-1)*256,128
- 16560 POKE CH+(OS-1)*256+1,255
- 16570 RETURN
- 16600 REM SET BLOCK MARKERS
- 16610 VL=PG*64+SY*8+SX:IF VL>=N(OS) THEN RETURN
- 16620 IF K$="" THEN BM=VL
- 16630 IF K$="" THEN EM=VL
- 16640 GOSUB 16710:REM PRINT BLOCK VALUES
- 16650 GOSUB 21030:REM COLOUR SUBROUTINE
- 16660 RETURN
- 16700 REM PRINT BLOCK MARKER VALUES
- 16710 PRINT" [145]"
- 16720 PRINT"BLOCK:";BM+1;"-";EM+1
- 16730 RETURN
- 17000 REM DELETE BLOCK
- 17010 PRINT" DELETE BLOCK [146] "
- 17020 IF BM>EM THEN 18310:REM BLOCK ERROR
- 17030 IF MF=1 THEN GOSUB 6010:REM SEQ. OFF
- 17040 I=0
- 17050 POKE CH+(OS-1)*256+BM+I,PEEK(CH+(OS-1)*256+EM+I+1)
- 17060 IF PEEK(CH+(OS-1)*256+BM+I)=255 THEN N(OS)=N(OS)-(EM-BM+1):RETURN
- 17070 I=I+1
- 17080 GOTO 17050
- 17500 REM INSERT BLOCK
- 17510 VL=PG*64+SY*8+SX:IF VL>N(OS) THEN RETURN
- 17520 IF VL>254 OR N(OS)+EM-BM>255 THEN 18410:REM OVERFLOW
- 17525 IF BM>EM THEN 18310:REM BLOCK ERROR
- 17526 PRINT" INSERT BLOCK [146] "
- 17530 IF MF=1 THEN GOSUB 6010:REM SEQ. OFF
- 17540 FOR I=N(OS)+1 TO VL STEP -1
- 17550 POKE CH+(OS-1)*256+I+(EM-BM)+1,PEEK(CH+(OS-1)*256+I)
- 17560 NEXT
- 17570 IF BM>VL THEN GOSUB 18110:REM COPY UP
- 17575 IF EM<VL THEN GOSUB 18210:REM COPY DOWN
- 17580 N(OS)=N(OS)+(EM-BM)+1
- 17590 GOSUB 27010:REM EDIT SCREEN
- 17600 RETURN
- 18000 REM WRITE BLOCK
- 18010 VL=PG*64+SY*8+SX:IF VL>N(OS) THEN RETURN
- 18020 IF VL>254 OR VL+EM-BM>254 THEN 18410:REM OVERFLOW
- 18025 IF BM>EM THEN 18310:REM BLOCK ERROR
- 18026 PRINT" WRITE BLOCK [146] "
- 18030 IF MF=1 THEN GOSUB 6010:REM SEQ. OFF
- 18040 IF EM<VL OR BM>VL THEN GOSUB 18110:REM COPY UP
- 18050 IF EM>VL OR BM<VL THEN GOSUB 18210:REM COPY DOWN
- 18060 IF VL+EM-BM<N(OS) THEN 18090
- 18070 N(OS)=VL+EM-BM+1
- 18080 POKE CH+(OS-1)*256+N(OS),255
- 18090 GOSUB 27010:REM EDIT SCREEN
- 18095 RETURN
- 18100 REM COPY UP
- 18110 I=0
- 18120 FOR J=BM TO EM
- 18130 IF K$="" THEN POKE CH+(OS-1)*256+VL+I,PEEK(CH+(OS-1)*256+J)
- 18135 IF K$=" " THEN POKE CH+(OS-1)*256+VL+I,PEEK(CH+(OS-1)*256+J+(EM-BM)+1)
- 18140 I=I+1
- 18150 NEXT
- 18160 RETURN
- 18200 REM COPY DOWN
- 18210 I=0
- 18220 FOR J=EM TO BM STEP -1
- 18230 POKE CH+(OS-1)*256+VL+EM-BM+I,PEEK(CH+(OS-1)*256+J)
- 18240 I=I-1
- 18250 NEXT
- 18260 RETURN
- 18300 REM BLOCK MARKER ERROR
- 18310 PRINT" BLOCK MARKER ERROR [146]"
- 18320 GOSUB 21030:REM COLOUR SUBROUTINE
- 18330 RETURN
- 18400 REM DATA OVERFLOW ERROR
- 18410 PRINT" OVERFLOW ERROR [146]"
- 18420 GOSUB 21030:REM COLOUR SUBROUTINE
- 18430 RETURN
- 21000 REM COLOUR SUBROUTINE
- 21030 IF OS>3 THEN OS=1
- 21040 IF OS=1 THEN PRINT""
- 21050 IF OS=2 THEN PRINT"[158]"
- 21060 IF OS=3 THEN PRINT""
- 21070 RETURN
- 27000 REM NOTE EDIT SCREEN
- 27010 PRINT"[147] NEXT CHAN HELP SEQ ON/OFF EXIT "
- 27020 PRINT" F1 F3 F5 F7 "
- 27070 PRINT"[176][192][192][192][178][192][192][192][178][192][192][192][178][192][192][192][178][192][192][192][178][192][192][192][178][192][192][192][178][192][192][192][174]"
- 27080 PRINT"}1}2}3}4}5}6}7}8}"
- 27090 PRINT"[176]```{```{```{```{```{```{```{```{```[179]"
- 27100 PRINT"}0+}}}}}}}}}"
- 27110 PRINT"[171]```{```{```{```{```{```{```{```{```[179]"
- 27120 PRINT"}8+}}}}}}}}}"
- 27130 PRINT"[171]```{```{```{```{```{```{```{```{```[179]"
- 27140 PRINT"}16+}}}}}}}}}"
- 27150 PRINT"[171]```{```{```{```{```{```{```{```{```[179]"
- 27160 PRINT"}24+}}}}}}}}}"
- 27170 PRINT"[171]```{```{```{```{```{```{```{```{```[179]"
- 27180 PRINT"}32+}}}}}}}}}"
- 27190 PRINT"[171]```{```{```{```{```{```{```{```{```[179]"
- 27200 PRINT"}40+}}}}}}}}}"
- 27210 PRINT"[171]```{```{```{```{```{```{```{```{```[179]"
- 27220 PRINT"}48+}}}}}}}}}"
- 27230 PRINT"[171]```{```{```{```{```{```{```{```{```[179]"
- 27240 PRINT"}56+}}}}}}}}}"
- 27250 PRINT"[173]```[177]```[177]```[177]```[177]```[177]```[177]```[177]```[177]```[189]"
- 27260 PRINT"FILE:";N$
- 27265 GOSUB 16710:REM PRINT BLOCK VALUES
- 27270 GOSUB 21030:REM COLOUR SUBROUTINE
- 27280 PRINT"CHANNEL:";OS
- 27285 IF PG*64>N(OS) THEN PG=0
- 27286 IF PG<0 THEN PG=INT((N(OS)-1)/64)
- 27290 PRINT"NOTES:PAGE:[145]"
- 27300 PRINT TAB(9);N(OS);TAB(24);PG*64+1;"-";(PG+1)*64
- 27302 REM INITIALISE CURSOR CONTROLS
- 27304 SX=0:SY=0:FG=0
- 27310 REM PRINT NOTE DATA
- 27320 I=0:LL=0:PRINT"";
- 27330 VL=PEEK(CH+(OS-1)*256+PG*64+I)
- 27340 IF VL=128 THEN NL$="R ":GOTO 27385:REM REST
- 27350 IF VL=255 THEN NL$=": ":GOTO 27385:REM END OF DATA
- 27360 GOSUB 27510:REM NOTE/OCTAVE STRING
- 27385 PRINT NL$;"";
- 27390 I=I+1:IF I=64 OR VL=255 THEN GOSUB 16030:RETURN
- 27395 LL=LL+1:IF LL=8 THEN LL=0:PRINT:PRINT"";
- 27400 GOTO 27330
- 27500 REM NOTE LETTER/OCTAVE STRING
- 27510 OV=INT(VL/16):REM OCTAVE
- 27520 O$=STR$(OV):O$=RIGHT$(O$,1)
- 27530 NL$=L$(VL-OV*16):REM NOTE LETTER NAME
- 27540 NL$=NL$+O$:IF LEN(NL$)=2 THEN NL$=NL$+" "
- 27550 RETURN
- 28000 REM HELP SCREEN
- 28010 POKE 53280,5:POKE 53281,5:PRINT"[147]";
- 28011 PRINT" PRESS [F7] TO EXIT : [176]`````````````````````````````";
- 28012 PRINT"[192][192][192][192][192][192][192][192][192][174][221][F][146][144]CHA";
- 28013 PRINT"NGEFILENAME}}}}[P]";
- 28014 PRINT"[146][144]NEXTPAGE}}[SHIFT] & [P][146][144]PREVIOUSPAGE";
- 28015 PRINT"}}}}[+][146][144]INCREAS";
- 28016 PRINT"ETEMPO}}[-][146][144]DECREASETEMPO}}";
- 28017 PRINT"}}[HOME][146][144]RESETNOTECOUNTERS";
- 28018 PRINT"}}}}[146][144]EDITCONTROLS:[CRSR][146]";
- 28019 PRINT"[144]MOVECURSOR}}[146][144]`````````````}}[CTRL] &";
- 28020 PRINT" [B][146][144]'BEGIN'BLOCKMARK}}[CTRL] & [E][146][144]'END'BLOCKMARK";
- 28021 PRINT"}}}}[CTRL] & [D][146][144]DELETE";
- 28022 PRINT"BLOCK}}[CTRL] & [W][146][144]WRITEBLOCKATCRSR}}[CTRL] &";
- 28023 PRINT" [I][146][144]INSERTBLOCKATCRSR}}";
- 28024 PRINT"[221][221][SHIFT] & [CLR][146][144]CLEARCHANNEL[221]";
- 28025 PRINT"[173][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192]";
- 28026 PRINT"[192][192][192][192][192][192][192][192][192][189]"
- 28160 GET K$:IF K$="" THEN 28160
- 28170 IF K$<>CHR$(136) THEN 28160
- 28180 K$=""
- 28190 POKE 53280,0:POKE 53281,0
- 28200 GOSUB 27010:REM NOTE EDIT ECREEN
- 28210 RETURN
- 30000 REM INPUT NEW FILENAME
- 30010 POKE 53280,5:POKE 53281,5
- 30020 PRINT"[147] ENTER NEW FILENAME : PRESS [RETURN] [146]";
- 30030 PRINT
- 30040 PRINT"FILE : ";N$
- 30050 PRINT""
- 30060 L=14:TB=5:RS=1:GOSUB 32040:REM INPUT SUBROUTINE
- 30070 IF A>0 THEN N$=Y$
- 30080 POKE 53280,0:POKE 53281,0
- 30090 RETURN
- 32000 REM INPUT RESTRICTION SUBROUTINE
- 32010 REM L=LENGTH OF INPUT
- 32020 REM TB=TABULATION OF ROUTINE
- 32030 REM RS=CHARACTER RESTRICTIONS
- 32040 A=0:Y$="":SP=1
- 32050 PRINT TAB(TB+L+1):PRINT"[145][174][157][189][145]";:FOR X=0 TO L+1:PRINT"[157][157] ";:NEXT:PRINT"[145][176][157][173][145][144][164][157]";
- 32060 GET X$:IF X$="" THEN 32060
- 32070 IF X$=CHR$(160) OR X$=" " OR X$=CHR$(20) OR X$=CHR$(13) THEN 32130
- 32080 IF RS=0 THEN IF X$=>"0" AND X$=<"9" THEN 32130
- 32090 IF RS=1 AND X$=>CHR$(35) AND X$=<CHR$(93) THEN 32130
- 32100 GOTO 32060
- 32110 IF A=L-1 THEN PRINT"[157][157]";
- 32120 GOTO 32060
- 32130 IF X$=CHR$(20) AND A=0 THEN 32060
- 32140 IF X$=CHR$(13) AND RIGHT$(Y$,1)=" " THEN Y$=LEFT$(Y$,LEN(Y$)-1):A=A-1
- 32150 IF X$=CHR$(13) THEN PRINT:RETURN
- 32160 A=A+1:IF X$<>CHR$(32) THEN SP=0
- 32170 IF A>L AND X$<>CHR$(20) THEN X$="":A=A-1
- 32180 IF A<1 THEN X$="":A=0
- 32190 IF X$=CHR$(20) THEN PRINT TAB(A)"[157][164] [157][157]";:A=A-2:Y$=LEFT$(Y$,LEN(Y$)-1):GOTO 32110
- 32200 IF X$=CHR$(32) AND SP=1 THEN X$="":A=A-1
- 32210 IF X$=CHR$(32) THEN SP=SP+1
- 32220 Y$=Y$+X$:PRINT X$;:IF A<L THEN PRINT"[164][157]";
- 32230 GOTO 32060
- 35000 REM MAIN MENU
- 35010 PRINT"[147] MOVE CURSOR UP & DOWN:PRESS [RETURN] [146]"
- 35020 PRINT"***MACRO EDITOR***"
- 35030 PRINT"V.H.BERRY C.1989"
- 35040 PRINT" [176][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][174]"
- 35060 PRINT" MACRO EDITOR "
- 35070 PRINT" HARDCOPY "
- 35080 PRINT" DISK MENU "
- 35090 PRINT" EXIT PROGRAM "
- 35100 PRINT
- 35110 PRINT" [173][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][189]"
- 35120 PRINT"":T1=10:LL=3:GOSUB 39010:REM MENU SYSTEM ROUTINE
- 35130 IF A=3 THEN RETURN
- 35140 ON A+1 GOSUB 15010,36010,37020
- 35150 GOTO 35010
- 36000 REM HARDCOPY MENU
- 36010 PRINT"[147] MOVE CURSOR UP & DOWN:PRESS [RETURN] [146]"
- 36020 PRINT"*** HARDCOPY ***"
- 36030 PRINT"FILE : ";N$
- 36040 PRINT" [176][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][174]"
- 36050 PRINT" NEW FILENAME "
- 36060 PRINT" HORIZONTAL PRINT"
- 36070 PRINT" VERTICAL PRINT "
- 36080 PRINT" EXIT MENU "
- 36090 PRINT" [173][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][189]"
- 36100 PRINT"":T1=10:LL=3:GOSUB 39010:REM MENU SYSTEM ROUTINE
- 36110 IF A=3 THEN RETURN
- 36120 ON A+1 GOSUB 30010,46010,47010
- 36130 GOTO 36010
- 37000 REM DISK MENU
- 37020 PRINT"[147] MOVE CURSOR UP & DOWN:PRESS [RETURN] [146]"
- 37030 PRINT"*** DISK MENU ***"
- 37040 PRINT"FILE : ";N$
- 37050 PRINT" [176][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][174]"
- 37060 PRINT" NEW FILENAME "
- 37070 PRINT" LOAD SID "
- 37090 PRINT" LOAD MUSIC "
- 37095 PRINT" APPEND MUSIC "
- 37100 PRINT" SAVE MUSIC "
- 37110 PRINT" DISK COMMANDS "
- 37120 PRINT" EXIT MENU "
- 37130 PRINT
- 37140 PRINT" [173][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][189]"
- 37150 PRINT"":T1=10:LL=6:GOSUB 39010:REM MENU SYSTEM ROUTINE
- 37160 IF A=6 THEN RETURN
- 37165 IF A>0 AND A<6 AND MF=1 THEN GOSUB 6010:REM TURN OFF SEQUENCER
- 37170 ON A+1 GOSUB 30010,42010,40010,40010,41010,45010
- 37180 GOTO 37020
- 38000 REM DISK COMMAND MENU
- 38010 PRINT"[147] MOVE CURSOR UP & DOWN:PRESS [RETURN] [146]"
- 38020 PRINT"***DISK COMMANDS***"
- 38030 PRINT"FILE : ";N$
- 38040 PRINT" [176][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][174]"
- 38045 PRINT" DISK DIRECTORY "
- 38050 PRINT" INTIALISE DISK "
- 38060 PRINT" SCRATCH SID "
- 38070 PRINT" SCRATCH MUSIC "
- 38080 PRINT" SCRATCH BOTH "
- 38090 PRINT" VALIDATE DISK "
- 38100 PRINT" EXIT MENU "
- 38110 PRINT
- 38120 PRINT" [173][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][189]"
- 38130 PRINT"":T1=10:LL=6:GOSUB 39010:REM MENU SYSTEM ROUTINE
- 38140 RETURN
- 38500 REM DIRECTORY MENU
- 38505 IF DY*12>FI THEN DY=0
- 38510 PRINT"[147] MOVE CURSOR UP & DOWN:PRESS [RETURN] [146]"
- 38520 PRINT"***DISK DIRECTORY***"
- 38525 PRINT"BLOCKS FREE : ";BF
- 38530 PRINT" [176][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][174]"
- 38540 PRINT" ";N$;""
- 38550 FOR I=12*DY TO 11+(12*DY)
- 38555 IF I>FI THEN PRINT:GOTO 38570
- 38560 PRINT" ";FI$(I)
- 38570 NEXT I
- 38575 PRINT" NEXT PAGE"
- 38580 PRINT" [173][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][189]"
- 38590 PRINT"":T1=10:LL=13:GOSUB 39010:REM MENU SYSTEM ROUTINE
- 38592 IF A=13 THEN DY=DY+1:GOTO 38505
- 38593 IF A=0 THEN 38600
- 38594 IF LEN(FI$((A-1)+12*DY))<3 THEN 38600
- 38595 N$=LEFT$(FI$((A-1)+12*DY),LEN(FI$((A-1)+12*DY))-2)
- 38600 RETURN
- 39000 REM MENU SYSTEM ROUTINE
- 39010 A=0:PRINT TAB(T1);">"
- 39020 GET X$:IF X$="" THEN 39020
- 39030 IF A=LL AND X$=CHR$(17) THEN A=A-1:PRINT"[145][145]"
- 39040 IF A=0 AND X$=CHR$(145) THEN A=A+1:PRINT
- 39050 IF X$=CHR$(17) THEN A=A+1:PRINT TAB(T1);"[145] [157]>"
- 39060 IF X$=CHR$(145) THEN A=A-1:PRINT TAB(T1);"[145] [157][145]>"
- 39070 IF X$=CHR$(13) THEN RETURN
- 39080 GOTO 39020
- 40000 REM LOAD MUSIC FILE
- 40010 X$=".1":I=0:FG=0:IF A=3 THEN FG=1
- 40020 N=0:IF FG=1 THEN N=N(I+1)
- 40030 OPEN 15,8,15
- 40040 OPEN 2,8,2,N$+X$+",S,R"
- 40050 INPUT#15,EN,ER$,TR,SE
- 40060 IF EN<>0 THEN PRINT"[147] LOAD[146]";:GOTO 44010
- 40070 PRINT" LOADING MUSIC FILE : [146]";
- 40080 INPUT#2,A
- 40090 POKE CH+I*256+N,A
- 40095 IF N=255 THEN POKE CH+I*256+N,255:GOTO 40110
- 40100 IF A<>255 THEN N=N+1:GOTO 40080
- 40110 N(I+1)=N
- 40120 CLOSE 2
- 40130 CLOSE 15
- 40140 IF I=0 THEN I=1:X$=".2":GOTO 40020
- 40150 IF I=1 THEN I=2:X$=".3":GOTO 40020
- 40160 RETURN
- 41000 REM SAVE MUSIC FILE
- 41010 X$=".1":I=0
- 41020 N=0
- 41030 OPEN 15,8,15
- 41040 OPEN 2,8,2,N$+X$+",S,W"
- 41050 INPUT#15,EN,ER$,TR,SE
- 41060 IF EN<>0 THEN PRINT"[147] SAVE[146]";:GOTO 44010
- 41070 PRINT" SAVING MUSIC FILE : [146]";
- 41080 A=PEEK(CH+I*256+N)
- 41090 PRINT#2,A
- 41100 IF A<>255 THEN N=N+1:GOTO 41080
- 41110 CLOSE 2
- 41120 CLOSE 15
- 41130 IF I=0 THEN I=1:X$=".2":GOTO 41020
- 41140 IF I=1 THEN I=2:X$=".3":GOTO 41020
- 41150 RETURN
- 42000 REM LOAD FSID REGISTERS
- 42010 OPEN 15,8,15
- 42020 OPEN 2,8,2,N$+".S,S,R"
- 42030 INPUT#15,EN,ER$,TR,SE
- 42040 IF EN<>0 THEN PRINT"[147] LOAD[146]";:GOTO 44010
- 42050 PRINT" LOADING SOUND FILE : [146]";
- 42060 INPUT#2,A
- 42070 POKE 49275,A
- 42080 FOR CE=0 TO 2
- 42090 FOR REG=0 TO 6
- 42100 INPUT#2,A
- 42110 POKE FSID+REG+7*CE,A
- 42120 NEXT REG,CE
- 42130 CLOSE 2
- 42140 CLOSE 15
- 42150 RETURN
- 44000 REM FILE ERROR ROUTINE
- 44010 CLOSE 2:CLOSE 15
- 44020 PRINT" ERROR : PRESS [RETURN] [146]";:PRINT
- 44030 PRINT"FILE : ";N$
- 44040 PRINT"ERROR # : ";EN:PRINT"";ER$:PRINT"TR = ";TR;" : SE = ";SE
- 44050 GET K$:IF K$<>CHR$(13) THEN 44050
- 44060 RETURN
- 45000 REM DISK ROUTINES
- 45010 OPEN 15,8,15
- 45020 GOSUB 38010:REM DISK COMMAND MENU
- 45030 IF A=6 THEN CLOSE 15:RETURN
- 45035 IF MF=1 THEN GOSUB 6010:REM TURN OFF SEQUENCER
- 45037 IF A=0 THEN GOSUB 45300:GOSUB 38510:GOTO 45020:REM DIRECTORY
- 45040 IF A>1 THEN 45080
- 45050 PRINT" INTIALISE DISK : [146]"
- 45060 PRINT#15,"I"
- 45070 GOTO 45020
- 45080 IF A<>5 THEN 45120
- 45090 PRINT" VALIDATE DISK : [146]"
- 45100 PRINT#15,"V"
- 45110 GOTO 45020
- 45120 IF A=2 THEN 45160
- 45125 PRINT" SCRATCH MUSIC FILE : [146]"
- 45130 PRINT#15,"S:"+N$+".1"
- 45132 PRINT#15,"S:"+N$+".2"
- 45134 PRINT#15,"S:"+N$+".3"
- 45150 IF A=3 THEN 45020
- 45160 PRINT" SCRATCH SOUND FILE : [146]"
- 45170 PRINT#15,"S:"+N$+".S"
- 45180 GOTO 45020
- 45200 REM DISK DIRECTORY READ
- 45300 I=0:FI$(I)=""
- 45310 OPEN 1,8,0,"$0"
- 45320 GET#1,A$,B$
- 45330 GET#1,A$,B$
- 45340 GET#1,A$,B$
- 45350 C=0
- 45360 IF A$<>"" THEN C=ASC(A$)
- 45370 IF B$<>"" THEN C=C+ASC(B$)*256
- 45380 BF=C
- 45390 GET#1,B$:IF ST<>0 THEN 45470
- 45400 IF B$<>CHR$(34) THEN 45390
- 45410 GET#1,B$:IF B$<>CHR$(34) THEN FI$(I)=FI$(I)+B$:GOTO 45410
- 45420 GET#1,B$:IF B$=CHR$(32) THEN 45420
- 45425 IF RIGHT$(FI$(I),2)=".1" THEN FI$(I)=LEFT$(FI$(I),LEN(FI$(I))-1)+"M":I=I+1
- 45426 IF RIGHT$(FI$(I),2)=".S" THEN I=I+1
- 45427 IF I=37 THEN 45470
- 45430 C$="":FI$(I)=""
- 45440 C$=C$+B$:GET#1,B$:IF B$<>"" THEN 45440
- 45450 IF ST=0 THEN 45330
- 45460 CLOSE 1
- 45470 FI=I:DY=0
- 45480 CLOSE 1:RETURN
- 46000 REM HORIZONTAL HARDCOPY
- 46010 OPEN 4,4
- 46012 PRINT#4,CHR$(27);CHR$(108);CHR$(6):REM LEFT MARGIN (COL=6)
- 46020 PRINT#4,"FILE: ";N$
- 46030 FOR OS=1 TO 3
- 46040 PRINT#4,CHR$(13)
- 46042 PRINT#4,"CHANNEL:";OS
- 46044 PRINT#4,CHR$(13);PC$;
- 46046 J=0:GOSUB 46210:REM PRINT NOTE#
- 46051 FOR I=0 TO N(OS)-1
- 46052 VL=PEEK(CH+(OS-1)*256+I)
- 46054 IF VL=128 THEN NL$="R ":GOTO 46066:REM REST
- 46060 GOSUB 27510:REM NOTE/OCTAVE STRING
- 46066 PRINT#4,NL$;" ";
- 46068 LL=LL+1:IF LL=16 THEN J=J+4:GOSUB 46210:REM NEXT LINE
- 46070 NEXT I
- 46075 PRINT#4,CHR$(13)
- 46080 NEXT OS
- 46085 PRINT#4,CHR$(12)
- 46090 CLOSE 4
- 46100 RETURN
- 46200 REM PRINT NOTE#
- 46210 LL=0:Y$=MID$(PS$,J+1,4)
- 46220 PRINT#4,CHR$(13)
- 46230 PRINT#4,Y$;" ";
- 46250 RETURN
- 47000 REM VERTICAL HARDCOPY
- 47010 OPEN 4,4
- 47012 PRINT#4,CHR$(27);CHR$(108);CHR$(4):REM LEFT MARGIN (COL=4)
- 47020 PRINT#4,"FILE: ";N$
- 47025 J=0
- 47030 GOSUB 46210:REM PRINT NOTE#
- 47035 PRINT#4,CHR$(13);" ";PC$;
- 47040 FOR OS=1 TO 3
- 47042 PRINT#4,CHR$(13)
- 47043 PRINT#4,"CHAN";OS;" ";
- 47050 VL=PEEK(CH+(OS-1)*256+LL+J*4)
- 47060 IF LL+J*4>=N(OS) THEN 47110:REM ABORT LINE
- 47070 IF VL=128 THEN NL$="R ":GOTO 47090:REM REST
- 47080 GOSUB 27510:REM NOTE/OCTAVE STRING
- 47090 PRINT#4,NL$;" ";
- 47100 LL=LL+1:IF LL<16 THEN 47050
- 47110 LL=0
- 47120 NEXT OS
- 47130 J=J+4
- 47140 IF J*4<N(1) OR J*4<N(2) OR J*4<N(3) THEN 47030
- 47150 PRINT#4,CHR$(12)
- 47160 CLOSE 4
- 47170 RETURN
- 50000 REM INITIALISATION
- 50010 IF PEEK(51712)=1 THEN 50112:REM MACHINE CODE PRESENT
- 50020 REM LOAD MACHINE CODE
- 50030 POKE 53280,5:POKE 53281,5
- 50040 PRINT"[147][176][174]"
- 50050 PRINT"MACRO EDITOR"
- 50060 PRINT"V.H.BERRYC.1989"
- 50070 PRINT"[173][189]"
- 50080 PRINT"LOADINGMACHINECODE"
- 50090 FG=FG+1:IF FG=1 THEN LOAD"SEQUENCER MC",8,1
- 50100 IF FG=2 THEN LOAD "NOTE TABLE MC",8,1
- 50112 DIM FI$(36)
- 50115 DIM L$(11):REM NOTE LETTER NAMES
- 50120 CH=51968:REM MUSIC DATA ADDRESS
- 50140 FSID=49175:REM FALSE SID DATA ADDRESS
- 50150 NH=51712:REM NOTE TABLE HIGH BYTE
- 50160 NL=51840:REM NOTE TABLE LOW BYTE
- 50170 MF=0:RF=0:REM MUSIC & RECORD FLAG
- 50210 N$="MUSIC FILE"
- 50220 PC$="NOTE# +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15"
- 50230 PC$=PC$+" +16"
- 50240 PS$="+0 +16 +32 +48 +64 +80 +96 +112+128+144+160+176+192+208+224+240"
- 50282 REM READ NOTE LETTER NAMES
- 50284 FOR I=0 TO 11
- 50286 READ A$
- 50288 L$(I)=A$
- 50289 NEXT
- 50290 FOR OS=1 TO 3
- 50300 GOSUB 16540:REM CLEAR CHANNEL DATA
- 50310 NEXT
- 50320 OS=1:REM EDIT VOICE 1
- 50330 POKE 53280,0:POKE 53281,0
- 50340 RETURN
- 60200 REM NOTE LETTER NAME DATA
- 60210 DATA "C","C#","D","D#"
- 60220 DATA "E","F","F#","G"
- 60230 DATA "G#","A","A#","B"
-